#include "bsp_exit.h"
#include "Reg_BitBand.h"

//==========================================================
//	函数名称：	 NVIC_Config
//
//	函数功能：	配置NVIC中断优先级
//
//	入口参数：	无
//
//	返回参数：	
//
//==========================================================
void NVIC_Config(uint8_t source,uint8_t main,uint8_t vice)
{
	NVIC_InitTypeDef NVIC_InitStruct;
	/* 设置优先级分组 */
	//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	/* 选择对应中断序号进行优先级配置 */
	NVIC_InitStruct.NVIC_IRQChannel=source;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=main;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=vice;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	/* 初始化EXTI */
	NVIC_Init(&NVIC_InitStruct);
}
//==========================================================
//	函数名称：	 EXTI_Config
//
//	函数功能：	 外部中断配置(开启)
//
//	入口参数：	无
//
//	返回参数：	
//
//==========================================================
void EXTI_Config(uint8_t GPIO_PortSource,uint8_t GPIO_PinSource,uint32_t source,uint8_t way)
{
	EXTI_InitTypeDef EXTI_InitStructure;
	/* 使能外部中断 */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	/* 选择EXTI的信号源 */
  GPIO_EXTILineConfig(GPIO_PortSource, GPIO_PinSource); 
	
	EXTI_InitStructure.EXTI_Line = source;
	/* EXTI为中断模式 */
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	/* 上升/下降沿中断 */
  EXTI_InitStructure.EXTI_Trigger =way;
	/* 使能中断 */	
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}
//==========================================================
//	函数名称：	 LD3320_Exti_enable
//
//	函数功能：	 LD3320语音识别进程中断使能
//
//	入口参数：	无
//
//	返回参数：	
//
//==========================================================
void LD3320_Exti_enable(void)
{
	NVIC_InitTypeDef NVIC_InitStruct;
	EXTI_InitTypeDef EXTI_InitStruct;
	
	/* 使能外部中断 */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//	/* 选择对应中断序号进行优先级配置 */
//	NVIC_InitStruct.NVIC_IRQChannel=LD3320_EXTI_IRQn;
//	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;
//	NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;
//	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
//	
//	NVIC_Init(&NVIC_InitStruct);
//	/* 配置外部中断 */
//	GPIO_EXTILineConfig(LD3320_EXTI_GPIO_PortSource,LD3320_EXTI_GPIO_PinSource);
//	EXTI_InitStruct.EXTI_Line=LD3320_EXTI_LINE;
//	EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
//	EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;
//	EXTI_InitStruct.EXTI_LineCmd=ENABLE;
//	
//	/* 初始化EXTI10_15 */
//	/*初始化外部中断*/
//	EXTI_Init(&EXTI_InitStruct);

	GPIO_SetBits(LD3320_GPIO_PORT,LD3320_GPIO_PIN);
}
//==========================================================
//	函数名称：	 LD3320_Exti_disable
//
//	函数功能：	 LD3320语音识别进程中断失能
//
//	入口参数：	无
//
//	返回参数：	
//
//==========================================================
void LD3320_Exti_disable(void)
{
	EXTI_InitTypeDef EXTI_InitStruct;
	/* 配置外部中断 */
	GPIO_EXTILineConfig(LD3320_EXTI_GPIO_PortSource,LD3320_EXTI_GPIO_PinSource);
	EXTI_InitStruct.EXTI_Line=LD3320_EXTI_LINE;
	EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;
	EXTI_InitStruct.EXTI_LineCmd=DISABLE;
	
	/*初始化外部中断*/
	EXTI_Init(&EXTI_InitStruct);

	GPIO_SetBits(LD3320_GPIO_PORT,LD3320_GPIO_PIN);
}
//==========================================================
//	函数名称：	 ASR_KeyGPIO_OUTPUT
//
//	函数功能：	 语音识别按键GPIO设置为输出模式
//
//	入口参数：	无
//
//	返回参数：	
//
//==========================================================
void ASR_KeyGPIO_OUTPUT(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	
	GPIO_InitStructure.GPIO_Pin=ASR_StatusGPIO_PIN;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;;
	
	GPIO_Init(ASR_StatusGPIO_PORT, &GPIO_InitStructure);
	
	GPIO_SetBits(ASR_StatusGPIO_PORT,ASR_StatusGPIO_PIN);
}
//==========================================================
//	函数名称：	 ASR_KeyGPIO_INPUT
//
//	函数功能：	 语音识别按键GPIO设置为输出模式
//
//	入口参数：	无
//
//	返回参数：	
//
//==========================================================
void ASR_KeyGPIO_INPUT(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	
	GPIO_InitStructure.GPIO_Pin=ASR_StatusGPIO_PIN;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	
	GPIO_Init(ASR_StatusGPIO_PORT, &GPIO_InitStructure);
	
	GPIO_SetBits(ASR_StatusGPIO_PORT,ASR_StatusGPIO_PIN);
}
//==========================================================
//	函数名称：	 ASR_KeyEXTI
//
//	函数功能：	 开启ASR状态中断
//
//	入口参数：	无
//
//	返回参数：	
//
//==========================================================
void ASR_KeyEXTI(void)
{
	RCC_APB2PeriphClockCmd(ASR_StatusGPIO_CLK,ENABLE);						//打开GPIOD
	ASR_KeyGPIO_INPUT();																					//配置PIN8为输入模式
	NVIC_Config(ASR_Status_IRQn,3,2);
	EXTI_Config(ASR_Status_GPIO_PortSource,ASR_Status_GPIO_PinSource,ASR_Status_EXTI_LINE,EXTI_Trigger_Falling);//下降沿触发
}
